using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using AccessibilityTools.DB;
using SqlSugar;


#region Mantis Code Auto Generate Assistant Illustration V1.0
/// AutoCode 代码生成助手 V1.2
/// 数据库版本 MySQL 5.7.18
/// 设计依据：App.Config所在的MySQL的表格 BoxSettingInfo
/// ********************************************************************
/// <summary>
/// 设计表格默认包含的字段如下：
/// id 主键 int 
/// 表格名称命名规则是小写字母单次，不同单词用下划线连接
/// 字段名称命名规则是小写字母单次，不同单词用下划线连接
/// is_enabled 删除标识 int[ -1 彻底删除][ 0 删除][ 1 有效 ] 
/// 用户登录的函数，关联一个用户登录日志表：user_login(id,user_id,login_time,logout_time),否则log必须为false
/// 时间类型的数据数据库中如果用bigint表达，必须包含 date 或者 time 才能被识别，会自动生成datetime数据
/// 非引用类对象，数字，字符，布尔等类型考虑到数据库，可能为空的情况，如果支持null类型，声明为：类型?
/// 非引用类对象，数字，字符，布尔等类型考虑到数据库，可能为空的情况，如果不支持null类型，声明为：类型
/// 非引用类对象，数字，字符，布尔等类型，如果不支持null类型，在自动转换时候数字会转换为0 字符为 '' 布尔为false
/// 对于数字主键，0是C#中的默认值，故要求数据库中不存在主键值为0的情况
/// 字段和属性为一一对应，属性为简单属性结构，属性Get,Set方法都是public，且未添加其他判断内容
/// 代码生成时间：2024年10月-17日 07时30分
/// <summary>
#endregion

namespace AccessibilityTools.DB
{

    public class BoxSettingInfoService : BaseRepository<BoxSettingInfo> //继承base数据库并且转换数据库
    {

        #region Method [8]

        /// <summary>
        /// 查询表格中最大的ID
        /// </summary>
        /// <returns></returns>
        public int GetMaxId()
        {
            int maxId = Queryable().Max(it => it.Id);
            return maxId;
        }

        /// <summary>
        /// 数据记录数量
        /// </summary>
        /// <returns></returns>
        public int GetCount()
        {
            int total = GetCountAsync(it => it.IsDeleted == 0).Result;
            return total;
        }

        /// <summary>
        /// 数据记录数量
        /// </summary>
        /// <returns></returns>
        public int GetCount(string sqlWhere)
        {
            int total = QueryListByClauseAsync(sqlWhere).Result.Count;
            return total;
        }

        /// <summary>
        /// 根据ID 判断数据是否存在
        /// </summary>
        /// <returns></returns>
        public bool Exist(int ID)
        {
            bool result = ExistsAsync(it => it.Id == ID).Result;
            return result;
        }

        /// <summary>
        /// 增加对象信息
        /// </summary>
        /// <param name="boxsettinginfo"Instance>对象实例</param>
        /// <returns></returns>
        public int Add(BoxSettingInfo Instance)
        {
            Instance.IsDeleted = 0;
            int count = InsertAsync(Instance).Result;
            return count;
        }

        /// <summary>
        /// 增加对象列表信息
        /// </summary>
        /// <param name="boxsettinginfo"Instance>对象实例列表</param>
        /// <returns>返回插入成功的个数，如果遇到不能成功插入的中断插入</returns>
        public int Add(List<BoxSettingInfo> Instances)
        {
            int successCount = 0;
            successCount = InsertAsync(Instances).Result;
            return successCount;
        }

        /// <summary>
        /// 删除数据 不是软删除慎用！
        /// </summary>
        /// <param name="id">对象Id</param>
        /// <returns></returns>
        public bool Delete(int ID)
        {
            bool result = FakeDeleteByIdAsync(ID).Result;
            return result;
        }

        /// <summary>
        /// 更新对象信息
        /// </summary>
        /// <param name="boxsettinginfoInstances">对象实例</param>
        /// <returns></returns>
        public int Update(BoxSettingInfo Instance)
        {
            bool result = UpdateAsync(Instance).Result;
            if (result)
            {
                return 1;
            }
            return 0;
        }

        /// <summary>
        /// 查询有关二维码的信息
        /// </summary>
        /// <param name="sn"></param>
        /// <returns></returns>
        public BoxSettingInfo QuerySingle(string sn)
        {
            List<BoxSettingInfo> instance = QueryListByClauseAsync(p => p.BoxSn == sn && p.IsDeleted == 0).Result;
            if (instance.Any())
            {
                return instance[0];
            }
            return null;
        }
        /// <summary>
        /// 更新对象信息
        /// </summary>
        /// <param name="boxsettinginfoInstances">对象实例</param>
        /// <returns></returns>
        public int Update(List<BoxSettingInfo> Instances)
        {

            bool result = UpdateAsync(Instances).Result;
            if (result)
            {
                return Instances.Count;
            }
            return 0;
        }


        /// <summary>
        /// 根据sql 查询对象集合
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="ps">参数</param>
        /// <returns></returns>
        public List<BoxSettingInfo> GetList(string sql)
        {
            List<BoxSettingInfo> boxsettinginfoInstance = new List<BoxSettingInfo>();
            boxsettinginfoInstance = SqlQueryable(sql).Result;
            if (boxsettinginfoInstance.Count > 0 && boxsettinginfoInstance != null)
            {
                return boxsettinginfoInstance;
            }
            return null;
        }

        /// <summary>
        /// 查询对象集合
        /// </summary>
        /// <returns></returns>
        public List<BoxSettingInfo> GetList()
        {
            List<BoxSettingInfo> boxsettinginfoInstance = QueryAsync().Result;
            if (boxsettinginfoInstance.Count > 0 && boxsettinginfoInstance != null)
            {
                return boxsettinginfoInstance;
            }
            return null;
        }

        /// <summary>
        /// 根据IsEnabled查询对象集合
        /// </summary>
        /// <param name="IsDeleted">软删除标志位</param>
        /// <returns></returns>
        public List<BoxSettingInfo> GetList(int IsEnabled)
        {
            List<BoxSettingInfo> Instance = QueryListByClauseAsync(it => it.IsDeleted == IsEnabled).Result;
            if (Instance.Count > 0 && Instance != null)
            {
                return Instance;
            }
            return null;
        }
        /// <summary>
        /// 更新对象按照时间查询
        /// </summary>
        /// <param name="productiondetailsinfoInstances">对象实例</param>
        /// <returns></returns>
        public List<BoxSettingInfo> QueryYieldInfoByDate(DateTime dtStart, DateTime dtEnd)
        {
            List<BoxSettingInfo> ins = QueryListByClause(p => p.CreationTime >= dtStart && p.CreationTime <= dtEnd && p.IsDeleted == 0);
            if (ins.Any())//判断对象ins是否为空
            {
                return ins;
            }
            return null;
        }

        #endregion

        /// <summary>
        /// 删除数据 不是软删除慎用！
        /// </summary>
        /// <param name="where">表达式</param>
        /// <returns></returns>
        public bool Delete(string sn)
        {
            //public async Task<bool> FakeDeleteAsync(Expression<Func<T, bool>> where)
            //异步方法需要用到.Result
            bool b = FakeDeleteAsync(p => p.BoxSn == sn && p.IsDeleted == 0).Result;
            if (b)
            {
                return b;
            }
            return false;

        }


    }
}
